<?php

namespace app\jobs;

use think\queue\Job;

class ShopImages
{
    /**
     * fire方法是消息队列默认调用的方法 自动审核
     * @param Job $job 当前的任务对象
     * @param array|mixed $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data)
    {
        $isDone = $this->check($data);
        if ($isDone) {
            $job->delete();
            return;
        }
        $isJobDone = $this->doJob($data);
        if ($isJobDone) {
            //如果任务执行成功， 记得删除任务
            $job->delete();
        } else {
            if ($job->attempts() > 3) {
                $this->failRecord($data);//记录失败
                $job->delete();
            } else {
                $job->release(5); //$delay为延迟时间，表示该任务延迟2秒后再执行
            }
        }
    }

    /**
     * 检查是否需要执行
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     **/
    private function check($params)
    {
//        return true;
        $localPath = ROOT_PATH . "public" . $params['local_img_url'];
        if (file_exists($localPath)) {
            return true;
        }
        return false;
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean  任务执行的结果
     */
    private function doJob($params)
    {
        return \spider\Spider::saveShopImage($params);
    }

    private function failRecord($params)
    {
        \app\common\services\Task::imagesFailRecord($params);
    }

}
